package com.liuche.pictureserver.utils;

import com.liuche.pictureserver.common.exception.BizException;
import com.liuche.pictureserver.common.exception.ErrorCode;
import com.liuche.pictureserver.pojo.dto.UserHolderDTO;

/**
 * 用户信息工具类
 *
 * @author liuche
 */
public class UserHolder {
    private static final ThreadLocal<UserHolderDTO> USER = new ThreadLocal<>();

    /**
     * 保存用户信息
     *
     * @param userInfo 用户基本信息
     */
    public static void saveUser(UserHolderDTO userInfo) {
        USER.set(userInfo);
    }

    /**
     * 获取用户id
     *
     * @return 用户id
     */
    public static Long getUserId() {
        if (checkUserExist()) {
            throw new BizException(ErrorCode.NOT_LOGIN_ERROR);
        }
        return USER.get().getId();
    }

    /**
     * 获取用户信息
     *
     * @return 用户信息
     */
    public static UserHolderDTO getUserInfo() {
        return USER.get();
    }

    /**
     * 获取用户权限信息
     *
     * @return 全限值
     */
    public static String getUserRole() {
        if (checkUserExist()) {
            throw new BizException(ErrorCode.NOT_LOGIN_ERROR);
        }
        return USER.get().getUserRole();
    }

    /**
     * 移除用户信息
     */
    public static void removeUser() {
        USER.remove();
    }

    private static boolean checkUserExist() {
        return USER.get() == null;
    }
}
